home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / tools / dcview / src / nextfile.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-03-04  |  18.7 KB  |  704 lines

  1. /******************************************************************************
  2.  *    nextfile.c:    下層テキストのロード処理
  3.  ******************************************************************************
  4.  *
  5.  *
  6.  */
  7. #include <sxdef2.h>
  8. #include <zmusic.h>
  9. #include <direct.h>
  10. #include <stdio.h>
  11. #include <iocslib.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #include <io.h>
  15. #include <jfctype.h>
  16. #include <doslib.h>
  17. #include <direct.h>
  18. #include <event.h>        /* イベントマンを利用するときに必要    */
  19. #include <sxgraph.h>        /* グラフ系マネージャを利用するときに必要 */
  20. #include <window.h>        /* ウィンドウマンを利用するときに必要    */
  21. #include <control.h>        /* コントロールマンを利用するときに必要    */
  22. #include <dialog.h>        /* ダイアログマンを利用するときに必要    */
  23. #include <task.h>        /* タスクマンを利用するときに必要    */
  24. #include "DC.h"            /* このプログラム固有のヘッダファイル    */
  25.  
  26. /******************************************************************************
  27.  *    nextfile():    下層テキストのロード
  28.  ******************************************************************************
  29.  *    引数:    ComVal *pcv    共通変数へのポインタ
  30.  */
  31. void nextfile(ComVal *pcv)
  32. {
  33.     char buff[256],buff2[512];
  34.     char tempfname[90],taskfname[90],comexe[90],execfname[90];
  35.     LPoint mpos;
  36.     int comline,err = 0,i,res;
  37.     char *txtPt,*comPt;
  38.     int *txtNo;
  39.     FILE *fn;
  40.     void **pcm;
  41.     char *dmy;
  42.     long fileLen;
  43.     char drv[TS_NAMEMAX],path[TS_NAMEMAX],node[TS_NAMEMAX],ext[TS_NAMEMAX];
  44.     IcState *icon;
  45.  
  46.     char com[256];
  47.     int comNo;
  48.     char command[90];
  49.     char param[90];
  50.     char destfname[90];
  51.     char docfname[90];
  52.     char newfname[90];
  53.     char docPath[90];
  54.  
  55.     int type;         /* 1:doc,2:pcm,3:opm,4:ede,5:exe,6:cli    */
  56.  
  57.     com[0] = 0;
  58.     path[0] = 0;
  59.     command[0] = 0;
  60.     param[0] = 0;
  61.     destfname[0] = 0;
  62.     docfname[0] = 0;
  63.     newfname[0] = 0;
  64.     docPath[0] = 0;
  65.  
  66.  
  67.     mpos = EMMSLoc();
  68.     comline = pcv->ofset + LOWWORD(mpos) / pcv->fontS[pcv->font];
  69.  
  70.     if (pcv->Maxline < comline)
  71.         return;
  72.  
  73.     MMHdlLock(pcv->txt);    /* テキストブロックのハンドルをロック */
  74.     MMHdlLock(pcv->txtNo);
  75.  
  76.     txtPt = *(pcv->txt);
  77.     txtNo = *(pcv->txtNo);
  78.  
  79.     txtPt = txtPt + *(txtNo + comline);
  80.  
  81.     if (!strncmp(txtPt, "◎", 2)) {        /* コマンドラインか?    */
  82.         while(strncmp(txtPt, "TYPE=", 5)) {
  83.             if (*txtPt == 13) {
  84.                 err = 1;
  85.                 break;
  86.             }
  87.             txtPt++;
  88.         }
  89.         if (err) return;
  90.         comPt = &buff[0];
  91.         while(*txtPt != 13) {
  92.             *comPt++ = *txtPt++;
  93.         }
  94.         *comPt = 0;
  95.  
  96.  
  97.         comPt = &buff[0] + 5;
  98.         while(*comPt != 0) {        /*    '/' なんか使うなよ    */
  99.             if ((*comPt != ' ') && (*(comPt+1) == '/')) {
  100.                 *(comPt+1) = '\\';
  101.                 comPt++;
  102.             }
  103.             comPt++;
  104.         }
  105.         comPt = &buff[0] + 5;
  106.  
  107.         if (!strncmp(comPt, "DOC", 3)) {     /* TYPEの設定    */
  108.             type = 1;
  109.         } else if (!strncmp(comPt, "PCM", 3)) {
  110.             type = 2;
  111.         } else if (!strncmp(comPt, "OPM", 3)) {
  112.             type = 3;
  113.         } else if (!strncmp(comPt, "EDE", 3)) {
  114.             type = 4;
  115.         } else if (!strncmp(comPt, "EXE", 3)) {
  116.             type = 5;
  117.         } else if (!strncmp(comPt, "CLI", 3)) {
  118.             type = 6;
  119.         } else if (!strncmp(comPt, "COP", 3)) {
  120.             type = 7;
  121.         } else if (!strncmp(comPt, "DCV", 3)) {
  122.             type = 8;
  123.         } else {
  124.             type = 99;
  125.         }
  126.  
  127.         comPt = comPt + 3;
  128.         readcom(pcv, comPt, type, path, command, param, destfname, docfname, docPath);
  129.  
  130.         switch(type) {
  131.         case 1:                            /* DOCの場合    */
  132.             strcpy(&(pcv->pastFname[pcv->pastFno][0]),
  133.                              pcv->currentFname);
  134.             pcv->pastofset[pcv->pastFno] = pcv->ofset;
  135.  
  136.             strcpy(&(pcv->pastPath[pcv->pastFno][0]),
  137.                              pcv->currentPath);
  138.             structfname(pcv, path, docfname, pcv->currentFname);
  139.             strcpy(pcv->currentPath, docPath);
  140.  
  141.             if (GetData(pcv, pcv->currentFname)) {
  142.                 pcv->pastFno = pcv->pastFno + 1;
  143.                 CMShine(pcv->btn12Hdl,C_ACTIVE);
  144.                 drawGraph(pcv, 0);
  145.             } else {
  146.                 strcpy(pcv->currentFname, 
  147.                     &(pcv->pastFname[pcv->pastFno][0]));
  148.                 strcpy(pcv->currentPath, 
  149.                     &(pcv->pastPath[pcv->pastFno][0]));
  150.                 pcv->errorCode = 0;
  151.                 return;
  152.             }
  153.             break;
  154.  
  155.         case 2:                            /* PCMの場合    */
  156.             structfname(pcv, path, docfname, tempfname);
  157.             play_pcm(pcv, tempfname);
  158.             break;
  159.  
  160.         case 3:                            /* OPMの場合    */
  161.             if (!LOWWORD(zm_ver())) {
  162.                 DMError(D_CONFIRM, "ZMUSIC が常駐していません!");
  163.                 return;
  164.             }
  165.             structfname(pcv, path, docfname, tempfname);
  166.             play_music(pcv, tempfname);
  167.             break;
  168.  
  169.         case 4:                            /* EDEの場合    */
  170.             strcpy(&(pcv->pastFname[pcv->pastFno][0]),
  171.                              pcv->currentFname);
  172.             pcv->pastofset[pcv->pastFno] = pcv->ofset;
  173.             strcpy(&(pcv->pastPath[pcv->pastFno][0]),
  174.                              pcv->currentPath);
  175.             structfname(pcv, path, destfname, taskfname);
  176.  
  177.             for(i=0;i<strlen(destfname);i++) {
  178.                 if (*(destfname+i) == '|') {
  179.                     *(destfname+i) = 0;
  180.                     break;
  181.                 }
  182.             }
  183.  
  184.             if ((!strcmp(command, "PIC") || !strcmp(command, "PIC.R") || !strncmp(command, "GP11", 4)
  185.                 || !strncmp(command, "KT", 2) || !strncmp(command, "JPEGED", 6) || !strncmp(command, "JPGL", 4) 
  186.                     || !strncmp(command, "PIC2", 4) || !strncmp(command, "GLM", 3)) && pcv->picTask) {
  187.                 disp_pic(pcv, command, path, destfname, taskfname);
  188.             }
  189.  
  190.             structfname(pcv, path, docfname, pcv->currentFname);
  191.             strcpy(pcv->currentPath, docPath);
  192.  
  193.             if (GetData(pcv, pcv->currentFname)) {
  194.                 pcv->pastFno = pcv->pastFno + 1;
  195.                 CMShine(pcv->btn12Hdl,C_ACTIVE);
  196.                 drawGraph(pcv, 0);
  197.             } else {
  198.                 strcpy(pcv->currentFname, 
  199.                     &(pcv->pastFname[pcv->pastFno][0]));
  200.                 strcpy(pcv->currentPath, 
  201.                     &(pcv->pastPath[pcv->pastFno][0]));
  202.                 pcv->errorCode = 0;
  203.                 return;
  204.             }
  205.             break;
  206.  
  207.         case 5:                            /* EXE,CLIの場合 */
  208.         case 6:
  209.             if (pcv->activeFlag && (pcv->event.ev.how & KS_SHIFT))
  210.                 execDos(pcv, pcv->execCom, path, type);
  211.  
  212.             for(i=0;i<strlen(destfname);i++) {
  213.                 if (*(destfname+i) == '|') {
  214.                     *(destfname+i) = 0;
  215.                     break;
  216.                 }
  217.             }
  218.  
  219.             if ((!strcmp(command, "PIC") || !strcmp(command, "PIC.R") || !strncmp(command, "GP11", 4)
  220.                 || !strncmp(command, "KT", 2) || !strncmp(command, "JPEGED", 6) || !strncmp(command, "JPGL", 4) 
  221.                     || !strncmp(command, "PIC2", 4) || !strncmp(command, "GLM", 3)) && pcv->picTask) {
  222.                 disp_pic(pcv, command, path, destfname, taskfname);
  223.                 break;
  224.             }
  225.  
  226.             if (!strcmp(command, "COPY")) {
  227.                 comPt += 6;
  228.                 for(i=0;i<strlen(comPt);i++) {
  229.                     if (*(comPt+i) == ' ') {
  230.                         *(comPt+i) = 0;
  231.                         break;
  232.                     }
  233.                 }
  234.                 sprintf(destfname, "A:%s", comPt);
  235.                 structfname(pcv, path, destfname, taskfname);
  236.                 if (!strcmp(comPt+i+1, "OPM"))
  237.                     play_music(pcv, taskfname);
  238.                 else
  239.                     play_pcm(pcv, taskfname);
  240.                 break;
  241.             }
  242.             break;
  243.         case 7:                            /* COPの場合 */
  244.             comPt++;
  245.             for(i=0;i<strlen(comPt);i++) {
  246.                 if (*(comPt+i) == ' ') {
  247.                     *(comPt+i) = 0;
  248.                     break;
  249.                 }
  250.             }
  251.             structfname(pcv, path, comPt, taskfname);
  252.             if (!strcmp(comPt+i+1, "OPM"))
  253.                 play_music(pcv, taskfname);
  254.             else
  255.                 play_pcm(pcv, taskfname);
  256.             break;
  257.         case 8:                            /* DCVの場合 */
  258.             strcpy(&(pcv->pastFname[pcv->pastFno][0]),
  259.                              pcv->currentFname);
  260.             pcv->pastofset[pcv->pastFno] = pcv->ofset;
  261.  
  262.             strcpy(&(pcv->pastPath[pcv->pastFno][0]),
  263.                              pcv->currentPath);
  264.             strcpy(pcv->currentFname, comPt + 1);
  265.             strcpy(pcv->currentPath, docPath);
  266.  
  267.             if (GetData(pcv, pcv->currentFname)) {
  268.                 pcv->pastFno = pcv->pastFno + 1;
  269.                 CMShine(pcv->btn12Hdl,C_ACTIVE);
  270.                 drawGraph(pcv, 0);
  271.             } else {
  272.                 strcpy(pcv->currentFname, 
  273.                     &(pcv->pastFname[pcv->pastFno][0]));
  274.                 strcpy(pcv->currentPath, 
  275.                     &(pcv->pastPath[pcv->pastFno][0]));
  276.                 pcv->errorCode = 0;
  277.                 return;
  278.             }
  279.             break;
  280.         }
  281.     }
  282.     MMHdlUnlock(pcv->txtNo);    /* テキストブロックのハンドルをアンロック */
  283.     MMHdlUnlock(pcv->txt);
  284. }
  285.  
  286. /******************************************************************************
  287.  *    readcom():    コマンドライン解析
  288.  ******************************************************************************
  289.  *    引数:    ComVal *pcv    共通変数へのポインタ
  290.  */
  291. int readcom(ComVal *pcv, char *comPt, int type, char *path, char *command, char *param, char *destfname, char *docfname, char *docPath)
  292. {
  293.     int i, comlen, partlen;
  294.     char *doc;
  295.     char buff[90];
  296.  
  297.     *path = 0;
  298.     *command = 0;
  299.     *param = 0;
  300.     *destfname = 0;
  301.     *docfname = 0;
  302.  
  303.     if (*comPt == ';' || *comPt == ',') {            /* カレントパスの変更    */
  304.         comPt++;
  305.         if (!strncmp(comPt, "CD=", 3) || !strncmp(comPt, "CK=", 3)) {
  306.             comPt = comPt + 3;
  307.  
  308.             if (*comPt == '\\') {
  309.                 if (!strncmp(pcv->currentFname, pcv->a_drv, strlen(pcv->a_drv)))
  310.                     sprintf(buff, "A:%s", comPt);
  311.                 else
  312.                     sprintf(buff, "B:%s", comPt);
  313.  
  314.                 strcpy(comPt,buff);
  315.             }
  316.  
  317.             i = 0;
  318.             while(1) {
  319.                 if (*(comPt + i) == ':')
  320.                     if (*(comPt + i + 1) != '\\')
  321.                         break;
  322.                 i++;
  323.             }
  324.             strncpy(path, comPt, i);
  325.             path[i] = 0;
  326.             comPt = comPt + i;
  327.  
  328.             if (type == 1 || type == 4)
  329.                 structfname(pcv, path, "", docPath);
  330.  
  331.         } else {
  332.             while(*comPt != ':') {
  333.                 comPt++;
  334.             }
  335.         }
  336.     } else {
  337.         strcpy(docPath, pcv->currentPath);
  338.     }
  339.  
  340.     pcv->execCom = comPt;            /* execDos()に渡す文字列    */
  341.  
  342.     if (*comPt == ':') {            /* コマンドライン解析        */
  343.         comPt++;
  344.         if (*comPt == ' ')
  345.             comPt++;
  346.         while(*comPt == '+' || *comPt == '-' || *comPt == '*' || *comPt == ':') {
  347.             comPt++;
  348.         }
  349.  
  350.         if (*comPt == '\\') {
  351.             if (!strncmp(pcv->currentFname, pcv->a_drv, strlen(pcv->a_drv)))
  352.                 sprintf(buff, "A:%s", comPt);
  353.             else
  354.                 sprintf(buff, "B:%s", comPt);
  355.  
  356.             strcpy(comPt,buff);
  357.         }
  358.  
  359.         switch(type) {
  360.             case 1:        /*     DOC,PCM,OPM    */
  361.             case 2:
  362.             case 3:
  363.                 strcpy(docfname, comPt);
  364.                 break;
  365.             case 4:        /*    EDE        */
  366.                 doc = strchr(comPt, ';');
  367.                 if (doc == NULL)
  368.                     break;
  369.  
  370.                 partlen = strlen(comPt) - strlen(doc);
  371.                 strncpy(buff, comPt, partlen);
  372.                 buff[partlen] = 0;
  373.                 apartcom(pcv, buff, command, param, destfname);
  374.                 doc++;
  375.                 if (*doc == '\\') {
  376.                     if (!strncmp(pcv->currentFname, pcv->a_drv, strlen(pcv->a_drv))) {
  377.                         sprintf(buff, "A:%s", doc);
  378.                     } else if (!strncmp(pcv->currentFname, pcv->b_drv, strlen(pcv->b_drv))) {
  379.                         sprintf(buff, "B:%s", doc);
  380.                     } else {
  381.                         sprintf(buff, "C:%s", doc);
  382.                     }
  383.                     strcpy(doc,buff);
  384.                 }
  385.                 strcpy(docfname, doc);
  386.                 break;
  387.             case 5:        /*    EXE,CLI        */
  388.             case 6:
  389.                 apartcom(pcv, comPt, command, param, destfname);
  390.                 break;
  391.         }
  392.     }
  393. }
  394.  
  395. int apartcom(ComVal *pcv, char *comPt, char *command, char *param, char *destfname)
  396. /*    EXE,CLIの場合のコマンドの抽出
  397.  *    マルチ処理の場合は最後のコマンドのみ抽出する。
  398.  */
  399. {
  400.     int i, i1, i2, i3, comlen;
  401.     char buff[90];
  402.  
  403.     param[0] = 0;
  404.     comlen = strlen(comPt);
  405.  
  406.     for(i=comlen;i>0;i--) {
  407.         if (*(comPt + i) == ' ')
  408.             break;
  409.     }
  410.     if (i == 0 || *(comPt + i) == ':') {
  411.         strcpy(command, comPt + i);
  412.         destfname[0] = 0;
  413.     } else {
  414.         i1=i;
  415.         i2=i;
  416.         i3=i;
  417.         for(i=i;i>0;i--) {
  418.             if (*(comPt + i) == ' ')
  419.                 i2=i;
  420.             if (*(comPt + i) == ':' || *(comPt + i - 1) == '|')
  421.                 break;
  422.         }
  423.         if (i == 0) {
  424.             strncpy(command, comPt, i2);
  425.             command[i2] = 0;
  426.         } else if (i2 == i3) {
  427.             strncpy(command, comPt + i, i2 - i);
  428.             command[i2 - i] = 0;
  429.         } else {
  430.             strncpy(command, comPt + i, i2 - i);
  431.             command[i2++ - i] = 0;
  432.             strncpy(param, comPt + i2, i3 - i2);
  433.             param[i3 - i2] = 0;
  434.         }
  435.  
  436.         comPt = comPt + i3 + 1;
  437.         if (*comPt == '\\') {
  438.             if (!strncmp(pcv->currentFname, pcv->a_drv, strlen(pcv->a_drv))) {
  439.                 sprintf(buff, "A:%s", comPt);
  440.             } else if (!strncmp(pcv->currentFname, pcv->b_drv, strlen(pcv->b_drv))) {
  441.                 sprintf(buff, "B:%s", comPt);
  442.             } else {
  443.                 sprintf(buff, "C:%s", comPt);
  444.             }
  445.             strcpy(comPt,buff);
  446.         }
  447.         strcpy(destfname, comPt);
  448.     }
  449.     command = stoupper(command);
  450. }
  451.  
  452. int structfname(ComVal *pcv, char *newpath, char *name, char *newfname)
  453. /*    ファイルネームをカレントパスとnodeから作成する。
  454.  */
  455. {
  456.     char drv[90], path[90], node[90], ext[90];
  457.  
  458.     if (!strncmp(name, "A:", 2) || !strncmp(name, "a:", 2)) {
  459.         if (*(name+2) == '\\') {
  460.             sprintf(newfname, "%s\\%s", pcv->a_drv, &name[3]);
  461.         } else {
  462.             sprintf(newfname, "%s\\%s", pcv->a_drv, &name[2]);
  463.         }
  464.  
  465.     } else if (!strncmp(name, "B:", 2) || !strncmp(name, "b:", 2)){
  466.         if (*(name+2) == '\\') {
  467.             sprintf(newfname, "%s\\%s", pcv->b_drv, &name[3]);
  468.         } else {
  469.             sprintf(newfname, "%s\\%s", pcv->b_drv, &name[2]);
  470.         }
  471.  
  472.     } else if (!strncmp(name, "C:", 2) || !strncmp(name, "c:", 2)){
  473.         if (*(name+2) == '\\') {
  474.             sprintf(newfname, "%s\\%s", pcv->c_drv, &name[3]);
  475.         } else {
  476.             sprintf(newfname, "%s\\%s", pcv->c_drv, &name[2]);
  477.         }
  478.  
  479.     } else if (!strncmp(newpath, "A:", 2) || !strncmp(newpath, "a:", 2)) {
  480.         if (newpath[3] == 0) {
  481.             sprintf(newfname, "%s\\%s", pcv->a_drv, name);
  482.         } else {
  483.             if (*(newpath+2) == '\\') {
  484.                 sprintf(newfname, "%s\\%s\\%s", pcv->a_drv, &newpath[3], name);
  485.             } else {
  486.                 sprintf(newfname, "%s\\%s\\%s", pcv->a_drv, &newpath[2], name);
  487.             }
  488.         }
  489.  
  490.     } else if (!strncmp(newpath, "B:", 2) || !strncmp(newpath, "b:", 2)) {
  491.         if (newpath[3] == 0) {
  492.             sprintf(newfname, "%s\\%s", pcv->b_drv, name);
  493.         } else {
  494.             if (*(newpath+2) == '\\') {
  495.                 sprintf(newfname, "%s\\%s\\%s", pcv->b_drv, &newpath[3], name);
  496.             } else {
  497.                 sprintf(newfname, "%s\\%s\\%s", pcv->b_drv, &newpath[2], name);
  498.             }
  499.         }
  500.  
  501.     } else if (!strncmp(newpath, "C:", 2) || !strncmp(newpath, "c:", 2)) {
  502.         if (newpath[3] == 0) {
  503.             sprintf(newfname, "%s\\%s", pcv->c_drv, name);
  504.         } else {
  505.             if (*(newpath+2) == '\\') {
  506.                 sprintf(newfname, "%s\\%s\\%s", pcv->c_drv, &newpath[3], name);
  507.             } else {
  508.                 sprintf(newfname, "%s\\%s\\%s", pcv->c_drv, &newpath[2], name);
  509.             }
  510.         }
  511.  
  512.     } else {
  513.         strsfn(pcv->currentPath, drv, path, node, ext);
  514.         if (*newpath != 0) {
  515.             sprintf(newfname, "%s%s\\%s\\%s", drv, path, newpath, name);
  516.         } else {
  517.             sprintf(newfname, "%s%s\\%s", drv, path, name);
  518.         }
  519.     }
  520. }
  521.  
  522. /******************************************************************************
  523.  *    retpastf():    元のテキストをロード
  524.  ******************************************************************************
  525.  *    引数:    ComVal *pcv    共通変数へのポインタ
  526.  */
  527. void retpastf(ComVal *pcv)
  528. {
  529.     int buff;
  530.  
  531.     if (pcv->pastFno < 1)
  532.         return;
  533.  
  534.     buff = pcv->mloadFlag;
  535.     pcv->pastFno--;
  536.     strcpy(pcv->currentFname, &(pcv->pastFname[pcv->pastFno][0]));
  537.     strcpy(pcv->currentPath, &(pcv->pastPath[pcv->pastFno][0]));
  538.  
  539.     if (pcv->fcache && pcv->depth > 0)
  540.         pcv->depth--;
  541.     GetData(pcv, pcv->currentFname);
  542.  
  543.     pcv->mloadFlag = buff;
  544.     pcv->ofset = pcv->pastofset[pcv->pastFno];
  545.     CMValueSet(pcv->volHdl, pcv->ofset);
  546.     drawGraph(pcv, 0);
  547. }
  548.  
  549. /******************************************************************************
  550.  *    play_music():    musicファイル演奏
  551.  ******************************************************************************
  552.  *    引数:    ComVal *pcv    共通変数へのポインタ
  553.  */
  554. void play_music(ComVal *pcv, char *tempfname)
  555. {
  556.     char buff[256],buffm[512],buff2[512];
  557.     char drv[TS_NAMEMAX],path[TS_NAMEMAX],node[TS_NAMEMAX],ext[TS_NAMEMAX];
  558.     char mdrv[TS_NAMEMAX];
  559.     char execfname[90];
  560.     char command[90];
  561.     FILE *fn;
  562.     int i;
  563.  
  564.     fn = fopen(tempfname, "rt");
  565.     if (fn == NULL) {
  566.         DMError(D_CONFIRM,"ファイルが見つかりません!");
  567.         return;
  568.     }
  569.  
  570.     if (!pcv->mzTask) {
  571.         EMEnCross();
  572.         while(1) {
  573.             fgets(buffm, 512, fn);    /* 一行読み込み */
  574.             if (buffm[0] == 0)
  575.                 break;
  576.             if (!strncmp(strlwr(buffm), 
  577.                     ".adpcm_block_data", 17)) {
  578.                 for(i=17;i<256;i++) {
  579.                     if ((buffm[i] != ' ') &&
  580.                         (buffm[i] != '=') &&
  581.                             (buffm[i] != 9))
  582.                         break;
  583.                 }
  584.                 strsfn(tempfname,drv,path,node,ext);
  585.                 strcpy(mdrv, drv);
  586.                 strcat(mdrv, path);
  587.                 buff2[0] = 0;
  588.                 strncpy(buff2, buffm, 17);
  589.                 buff2[17] = 0;
  590.                 strcat(buff2, " ");
  591.                 strcat(buff2, mdrv);
  592.                 strcat(buff2, "\\");
  593.                 strcat(buff2, &buffm[i]);
  594.                 exec_zms(buff2);
  595.             } else {
  596.                 exec_zms(buffm);
  597.             }
  598.         }
  599.         fclose(fn);
  600.         EMDeCross();
  601.     } else {
  602.         fclose(fn);
  603.         command[0] = sprintf(&command[1], "%s %s", pcv->mzOpt, tempfname);
  604.         pcv->mzTask = TSFockB(0, 0, pcv->mzFname, command, 0, execfname);
  605.         if (pcv->mzTask < 0) {
  606.             sprintf(command ,"%s:が見つかりません!", pcv->mzFname);
  607.             DMError(D_CONFIRM, command);
  608.             pcv->mzTask = 0;
  609.             return;
  610.         }
  611.         strcpy(pcv->zmsfname, tempfname);
  612.     }
  613.     pcv->mloadFlag = 1;
  614.     CMShine(pcv->btn10Hdl,C_ACTIVE);
  615.     CMShine(pcv->btn11Hdl,C_ACTIVE);
  616. }
  617.  
  618. /******************************************************************************
  619.  *    play_pcm():    pcmファイル演奏
  620.  ******************************************************************************
  621.  *    引数:    ComVal *pcv    共通変数へのポインタ
  622.  */
  623. void play_pcm(ComVal *pcv, char *tempfname)
  624. {
  625.     char execfname[90];
  626.     char command[90];
  627.     FILE *fn;
  628.     void **pcm;
  629.     long fileLen;
  630.  
  631.     fn = fopen(tempfname, "rb");
  632.     if (fn == NULL) {
  633.         DMError(D_CONFIRM,"ファイルが見つかりません!");
  634.         return;
  635.     }
  636.  
  637.     if (!pcv->pcmTask) {
  638.         fseek(fn, 0L, SEEK_END);
  639.         fileLen = ftell(fn);    /* ファイルサイズを求める */
  640.         fseek(fn, 0L, SEEK_SET);
  641.         pcm = NULL;
  642.         pcm = MMChHdlNew(fileLen);  /* PCMメモリ確保 */
  643.         if (pcm == NULL) {
  644.             DMError(D_CONFIRM | D_RED,
  645.                 "メモリが確保できません!");
  646.             fclose(fn);
  647.             return;
  648.         }
  649.         MMHdlLock(pcm);
  650.         fread(*pcm, sizeof(char), (size_t) (fileLen), fn);
  651.         fclose(fn);
  652.         MMHdlUnlock(pcm);
  653.         ADPCMOUT(*pcm, 4*256+3, fileLen);
  654.         MMHdlDispose(pcm);
  655.     } else {
  656.         fclose(fn);
  657.         command[0] = sprintf(&command[1], "%s %s", pcv->pcmOpt, tempfname);
  658.         pcv->pcmTask = TSFockB(0, 0, pcv->pcmFname, command, 0, execfname);
  659.         if (pcv->pcmTask < 0) {
  660.             sprintf(command ,"%s:が見つかりません!", pcv->pcmFname);
  661.             DMError(D_CONFIRM, command);
  662.             pcv->pcmTask = 0;
  663.             return;
  664.         }
  665.     }
  666. }
  667.  
  668. /******************************************************************************
  669.  *    disp_pic():    画像ファイル処理
  670.  ******************************************************************************
  671.  *    引数:    ComVal *pcv    共通変数へのポインタ
  672.  */
  673. void disp_pic(ComVal *pcv, char *command, char *path, char *destfname, char *taskfname)
  674. {
  675.     char execfname[90];
  676.  
  677.     if (pcv->picTask != 0 && pcv->picOff)
  678.         taskoff(pcv);
  679.     structfname(pcv, path, destfname, taskfname);
  680.     if (strchr(taskfname, '.') == 0) {
  681.         if (!strncmp(command, "JPEGED", 6) || !strncmp(command, "JPGL", 4))
  682.             strcat(taskfname, ".JPG");
  683.         if (!strcmp(command, "PIC"))
  684.             strcat(taskfname, ".PIC");
  685.         if (!strcmp(command, "PIC2"))
  686.             strcat(taskfname, ".P2");
  687.         if (!strcmp(command, "GLM"))
  688.             strcat(taskfname, ".GLM");
  689.         if (!strcmp(command, "KT"))
  690.             strcat(taskfname, ".PIC");
  691.     }
  692.     command[0] = sprintf(&command[1], "%s %s", pcv->picOpt, taskfname);
  693.     pcv->picTask = TSFockB(0, 0, pcv->picFname, command, 0, execfname);
  694.  
  695.     if (pcv->picTask < 0) {
  696.         sprintf(command ,"%s:が見つかりません!", pcv->picFname);
  697.         DMError(D_CONFIRM, command);
  698.         pcv->picTask = 0;
  699.     }
  700.  
  701. }
  702. STR@I]EdEV3.00<@(!%G0JHH     
  703. ;7\7
  704. 6W^コマ Z@ "    (.Ohh$000ヨ=STL@セL